{{tag>serveur réseau}}
------

====== Lighttpd : Un serveur web léger ======


{{ light_logo_170px.png}}

**Lighttpd** est un serveur web (//HTTP//) qui, de par sa légèreté, se veut rapide. Il supporte un grand nombre de fonctionnalités comparables à celles d'[[:apache2|Apache]] (comme les rewrite, fast-cgi, proxy, etc.) pour des performances aussi bonnes sinon meilleures dans les tests faits par Lighttpd.

Par rapport à Apache, il ne supporte pas les fichiers htaccess ou encore htpasswd. Ces 2 problèmes sont contournables si vous avez accès à la configuration de votre serveur.

Lighttpd se trouve dans le top 5 des serveurs les plus utilisés dans le monde. Cette page est là pour vous expliquer comment l'installer et comment l'utiliser de manière simple.

===== Installation =====

Il suffit d'[[:tutoriel:comment_installer_un_paquet|installer le paquet]] **[[apt://lighttpd|lighttpd]]**.

===== Configuration =====
Tous les fichiers de configuration se trouvent dans **/etc/lighttpd**.
==== /etc/lighttpd ====
Voici ce que vous pouvez trouver dans ce répertoire.
  lighttpd.conf conf-available conf-enabled

  * Le fichier **lighttpd.conf** est le fichier de configuration principal à partir duquel les directives principales sont chargées.
  * **conf-available** est un dossier qui contient les fichiers de configuration des différents modules.
  * **conf-enabled** est un dossier 
===Le fichier lighttpd.conf===
Le plus important est de configurer la directive suivante qui définit la racine de Lighttpd.
<code>
server.document-root       = "/votre/chemin/"
</code>
Quelle que soit la modification faite dans le fichier de configuration, il est possible de vérifier que la syntaxe est correcte avec la commande suivante:
  lighttpd -t -f /etc/lighttpd/lighttpd.conf

**/etc/lighttpd/lighttpd.conf** pouvant, bien sûr, être remplacé par l'adresse de votre fichier de configuration.
==Les modules==
La première partie du fichier consiste en l'activation des différents modules du serveur. Pour activer un module, il suffit de décommenter sa ligne ou utiliser la commande **lighty-enable-mod** que nous verrons un peu plus loin.
<code>
server.modules              = (
            "mod_access",
            "mod_alias",
...
#           "mod_flv_streaming",
#           "mod_evasive"
)
</code>
Il est possible de retrouver une documentation détaillée des différents modules sur le wiki officiel de Lighttpd: [[http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs#Modules]]

Une documentation plus exhaustive sur les différentes directives de configuration sont disponibles à l'adresse suivante:
[[http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs:ConfigurationOptions]]

==== PHP et MySQL ====

Nous allons mettre en place le langage PHP5 et configurer Lighttpd pour qu'il puisse l'interpréter.

[[:tutoriel:comment_installer_un_paquet|Installer le paquet]] [[apt://php5-cgi|php5-cgi]] et éventuellement [[apt://php5-gd|php5-gd]].

Exécutez la commande suivante pour activer le module fastcgi :
  sudo lighty-enable-mod fastcgi
  
Depuis  Ubuntu 10.10, il faut activer le module fastcgi-php pour que cela fonctionne (sous Ubuntu 10.04 sauter l'étape) :
  sudo lighty-enable-mod fastcgi-php
  
Puis rechargez la configuration de lighttpd:
  sudo /etc/init.d/lighttpd force-reload

Enfin, on teste que le serveur prend bien en compte PHP (nb: si vous avez changé le chemin de //server.document-root//, remplacez // /var/www/ // par le chemin que vous avez indiqué):    
  sudo sh -c 'echo "<?PHP phpinfo(); ?>" > /var/www/test.php'
  sudo chown -R www-data:www-data /var/www/test.php
  w3m http://localhost/test.php

Lors du test ci-dessus si vous rencontrez une **erreur 403**, ajoutez à la fin du fichier **/etc/php5/cgi/php.ini**  :
  cgi.fix_pathinfo = 1
(//source erreur 403// : [[http://www.ubuntugeek.com/lighttpd-webserver-setup-with-php5-and-mysql-support.html|ubuntugeek.com]])
<note tip>Si, sous **Ubuntu 11.10**, la correction du fichier /etc/php5/cgi/php.ini ne suffit pas
 <code> sudo nano /etc/lighttpd/lighttpd.conf </code>
et ajoutez-y
<code>fastcgi.server = ( ".php" => (( 
                     "bin-path" => "/usr/bin/php-cgi",
                     "socket" => "/tmp/php.socket" 
                 )))</code>
[[http://redmine.lighttpd.net/projects/lighttpd/wiki/TutorialLighttpdAndPHP#Configuration|Tutoriel pour Lighttpd et PHP (en)]] \\ 
FIXME                 
                 </note>
                 
                 
<note tip>Sous **Ubuntu 12.04** ajouter uniquement dans le fichier /etc/lighttpd/lighttpd.conf , au niveau des modules (ligne 7):
<code>
server.modules = (
                   "mod_fastcgi",
                 )
 </code>
 </note>
==== MySql ====
Il suffit d'[[:tutoriel:comment_installer_un_paquet|installer les paquets]] suivants :
**[[apt://mysql-client,mysql-server,php5-mysql]]**
Et éventuellement PHPMyAdmin :
**[[apt://phpmyadmin|phpmyadmin]]**

Lors de l'installation, vous serez tout d'abord invité à indiquer à MySql qu'il fonctionnera avec Lighttpd.
Puis vous serez amenés à choisir un mot de passe pour l'accès root à phpmyadmin.

Après l'installation de ces paquets, il faut saisir les commandes suivantes :

  sudo lighty-enable-mod fastcgi userdir
  sudo /etc/init.d/mysql start
  sudo /etc/init.d/lighttpd restart


Si vous avez installé PHPMyAdmin, la base de données est alors accessible à l'adresse suivante : http://localhost/phpmyadmin


==== Ruby ====

<note warning>Cette procédure est probablement obsolète, cependant, le fichier de configuration de lighttpd peut servir.</note>

Si ce n'est pas déjà fait, il faut commencer par installer l'environnement Ruby et le framework [[rubyonrails|Ruby on Rails]] si nécessaire :
<code>sudo apt-get install ruby1.8 rubygems1.8 libmysql-ruby1.8 librmagick-ruby1.8 libfcgi-ruby1.8 libopenssl-ruby1.8 rake
sudo gem install --no-rdoc --no-ri -v=2.3.4 rails</code>

L'étape suivante consiste à copier les fichiers de son application ruby dans un sous répertoire du serveur web.
\\ Par exemple /usr/share/redmine/

Dernière étape, la configuration de lighttpd.

<code># /etc/lighttpd/conf-available/89-redmine.conf
$HTTP["host"] =~ "ruby.votresite.fr" {

	server.document-root = "/usr/share/redmine/public/"
	accesslog.filename   = "/var/log/lighttpd/redmine.access.log"
	server.error-handler-404   = "/dispatch.fcgi"
	#setenv.add-response-header = ( "Strict-Transport-Security" => "max-age=31536000" )
	server.indexfiles = ( "dispatch.fcgi" )

	$HTTP["url"] =~ "^/(images|javascripts|stylesheets|themes|plugin_assets)|favicon.ico" {
		expire.url = ( "" => "access plus 2 weeks" )
	}

	alias.url += ( "/plugin_assets/" => "/var/cache/redmine/default/plugin_assets/" )

	fastcgi.server += (
		".fcgi" => (
			"redmine" => (
				"min-procs" => 1,
				"max-procs" => 2,
				"socket"    => "/tmp/redmine-default-fcgi.socket",
				"bin-path"  => "/usr/share/redmine/public/dispatch.fcgi",
				"bin-environment" => (
					"RAILS_RELATIVE_URL_ROOT" => "",
					"X_DEBIAN_SITEID" => "default"
				),
				"kill-signal" => 10 # this is because programs linked against libfcgi need USR1 kill-signal
			)
		)
	)

	# quelques exemples

	#url.redirect = (
	#	"^/projects/apijs/issues\?sort=fixed_version:desc,id:desc$" => "/projects/apijs/issues?query_id=1"
	#)

	#$SERVER["socket"] == ":80" {
	#	url.redirect = ( "^/(.*)" => "https://redmine.luigifab.info/$1" )
	#}

	#$SERVER["socket"] == ":443" {
	#	ssl.engine  = "enable"
	#	ssl.pemfile = "/etc/ssl/private/votresite.crt"
	#	ssl.ca-file = "/etc/ssl/private/ca-certs.crt"
	#}
}</code>

==== SSL ====

Pour utiliser un certificat SSL, il faut au préalable installer les paquets suivants :
<code>sudo apt-get install openssl ssl-cert</code>

Pour créer un certificat SSL auto-signé, il est possible d'utiliser la commande suivante :
<code>sudo make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/ssl/private/localhost.pem</code>

Une fois le certificat créé, il faut modifier la configuration du serveur pour qu'il accepte les connexions HTTPS sur le port 443.
\\ Pour ce faire, il faut [[:tutoriel:comment_modifier_un_fichier|éditer le fichier]] **/etc/lighttpd/lighttpd.conf** avec les droits d'administration pour y ajouter les 3 lignes suivantes.
<code>$SERVER["socket"] == ":443" {
  ssl.engine = "enable"
  ssl.pemfile = "/etc/ssl/private/localhost.pem" }</code>

Dernière étape, le redémarrage du serveur.
<code>sudo service lighttpd restart</code>

Ensuite rendez vous sur https://localhost/
\\ Étant donné que le certificat SSL est auto-signé, une alerte de sécurité sera générée par le navigateur.

<note>En cas de problème, ajouter //ssl.use-sslv2 = "enable"// en dessous de //ssl.engine = "enable"//.
\\ https://bugs.launchpad.net/ubuntu/+source/lighttpd/+bug/645002</note>

===== Désinstallation =====

Pour supprimer cette application, il suffit de [[:tutoriel:comment_supprimer_un_paquet|supprimer son paquet]]. La configuration de l'application sera conservée ou supprimée selon la méthode de désinstallation que vous choisirez.

===== Voir aussi =====

  * **(en)** [[http://www.lighttpd.net/|Site officiel du projet Lighttpd]]
  * **(fr)** [[http://fr.wikipedia.org/wiki/Lighttpd|Lighttpd sur Wikipédia]]
  * **(en)** [[http://www.ubuntugeek.com/lighttpd-webserver-setup-with-php5-and-mysql-support.html|Configurer PHP5 pour Lighttpd]]
  * **(en)** [[http://nanotux.com/blog/the-ultimate-server/3/#l-php5| The ultimate server]]

----

//Contributeurs : [[utilisateurs:kagou|Patrice Vetsel]], [[utilisateurs:alteo_gange|alteo_gange]], [[utilisateurs:luigifab|luigifab]].//